package org.javabasic;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * @Auther: qingle
 * @Date: 2024/8/23-19:23
 * @Description:
 *
 * @version: 1.0
 */
public class MyClass_45_OuterClass2 {

	/**
	 * 一些多算法场合：当一个类需要实现多个相互关联的算法时，可以使用内部类来封装这些算法。
	 * 这样可以使代码更加模块化，易于维护和扩展。
	 */
	public class OuterClass {
		private int data;

		public void setData(int data) {
			this.data = data;
		}

		public int getData() {
			return data;
		}

		// 内部类实现不同的算法
		public class AlgorithmA {
			public int calculate() {
				return data * 2;
			}
		}

		public class AlgorithmB {
			public int calculate() {
				return data + 5;
			}
		}
	}

	/**
	 * 解决一些非面向对象的语句块：有时我们需要在一个地方执行一些与特定对象相关的操作，但这些操作并不完全符合面向对象的原则。
	 * 这时，可以使用内部类将这些操作封装起来。
	 */
	public class OuterClass2 {
		private final ArrayList<String> list = new ArrayList<>();

		public void addItem(String item) {
			list.add(item);
		}

		public void printItems() {
			// 使用内部类处理迭代器
			class ListIterator implements Iterator<String> {
				private int index = 0;

				@Override
				public boolean hasNext() {
					return index < list.size();
				}

				@Override
				public String next() {
					return list.get(index++);
				}
			}

			ListIterator iterator = new ListIterator();
			while (iterator.hasNext()) {
				System.out.println(iterator.next());
			}
		}
	}

//	public class OuterClass {
//		private String name;
//
//		public OuterClass(String name) {
//			this.name = name;
//		}
//
//		// 内部类实现某个接口
//		public class InnerClass implements SomeInterface {
//			@Override
//			public void doSomething() {
//				System.out.println("Hello, " + name);
//			}
//		}
//	}

	public static class Outer {
		void outMethod(){
			 int a =10;
			class Inner {
				void innerMethod(){
					System.out.println(a);
				}
			}

			// 创建Inner类的实例
			Inner inner = new Inner();
			// 调用innerMethod方法
			inner.innerMethod();
		}
//		public static void main(String[] args) {
//			// 创建Outer类的实例
//			Outer outer = new Outer();
//			// 调用outMethod方法，间接调用innerMethod
//			outer.outMethod();
//		}
	}

	public static void main(String[] args) {
		Outer outer = new Outer();
		outer.outMethod();

	}


}